package com.jiajia.study.mylist.myqueue;

import com.jiajia.study.mylist.MyLinkedList;

/**
 * 双端队列
 * @author : zjj
 * @date : 2021/1/15 15:52
 */
public class Dequeue<E> {

    private MyLinkedList<E> list = new MyLinkedList<>();


    /**
     * 双端队列的大小
     * @return  队列的大小
     */
    public int size() {
        return list.size();
    }

    /**
     * 队列是否为空
     * @return  是否为空
     */
    public boolean isEmpty() {
        return list.isEmpty();
    }

    /**
     * 清除队列
     */
    public void clear() {

        list.clear();
    }

    /**
     * 入队 从队尾入队
     * @param element   元素
     */
    public void enQueueRear(E element) {

        list.add(element);
    }

    /**
     * 出队，从队头出队
     * @return  出队
     */
    public E deQueueFront() {
        return list.remove(0);
    }

    /**
     * 从对队头入队
     * @param element   元素
     */
    public void enQueueFront(E element) {
        list.add(0,element);
    }

    /**
     * 从队尾出队
     * @return  出队元素
     */
    public E deQueueRear() {
        return list.remove(list.size() - 1);
    }

    /**
     * 查看队头元素
     * @return  队头元素
     */
    public E front() {

        return list.get(0);
    }

    /**
     * 查看队尾元素
     * @return  队尾元素
     */
    public E rear() {
        return list.get(list.size() - 1);
    }
}
